package com.lagou.mr.workhome;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class SortReducer extends Reducer<IntWritable, NullWritable,Text,IntWritable> {
    // 排序输出的序号
    private static Integer sortNum = 0;
    private Text sortNumKey = new Text();
    @Override
    protected void reduce(IntWritable key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {

        // 排序文件中的数据可能相同，在shuffle阶段分区的时候会被分到同一个分区，
        // 同一个分区的相同的数据（即key相同），分组后会被发到同一个reduce，当reduce的values中包含多个值时，对应就有多个key相同的数据，被分配到同一个reduce
        // 为了将排序文件中所有数据输出，要将重复的key也遍历出来，通过遍历values可以同时将key遍历出来
        for (NullWritable value : values) {
            ++sortNum;
            sortNumKey.set(sortNum.toString());
            // reduce的输出,key为排序号，value为排完序的值
            context.write(sortNumKey,key);
        }

    }
}
